package com.qq.filter;
//过滤器


import com.qq.model.User;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//这里的注解和web.xml里面定义的一样
@WebFilter("/center/*")
public class UserFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("这里是进行过滤的方法");
        /**
        filterChain链子的意思，在这里要进行放行，要不然页面什么都没有
        这里的都是方法里面的参数，参数的名字可以写自己喜欢的filterChain、servletRequest,servletResponse
        写这句页面就有数据了filterChain.doFilter(servletRequest,servletResponse);
        每访问一次login登录页面就会执行一次这个方法,这里还没进行判断
       filterChain.doFilter(servletRequest,servletResponse);
         */
        //进行判断
        //这里的getSession是HttpServlet里面的数据，这里要用就要进行强转
        //这里加括号是因为我们要先进行强转再进行点，如果没有括号就会先执行点再进行强制转，拿不到getSession
        HttpSession session =((HttpServletRequest)servletRequest).getSession();
        User user = (User)session.getAttribute("USER");

        if (user !=null){
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            //重定向,/login这里如果加斜杠就会没有项目名，直接到url的最左边的斜杠位置http://localhost:8080/login
            //这里加了path就不会出现这种情况了
            String path = ((HttpServletRequest)servletRequest).getContextPath();
            //没有用户就返回到登录页面
            ((HttpServletResponse)servletResponse).sendRedirect(path+"/login");
        }


    }

    @Override
    public void destroy() {

    }
}
